Ierarhizarea memoriei
Principiile de gestiune a memoriei conduc la organizarea ierarhizata a diferitelor subsisteme de memorie. La virful ierarhiei se gaseste memoria cea mai mica si cea mai rapida, in timp ce baza este constituita din memoria cea mai lenta si cu cel mai mare volum. In general transferul de date are loc doar intre niveluri adiacente ale ierarhiei.
Intrucit organizarea memoriei bazata pe localitatea programelor ofera valori bune pentru raportul cost/performanta, ideea este larg folosita in noile microprocesoare. Trebuie remarcat ca ierarhia memoriei pentru aceste sisteme are un numar mai mare de niveluri decit in modelele anterioare.
Principiul localitatii programelor este valabil pentru orice tip de referire la memorie. Totusi, diferitele niveluri ale ierarhiei necesita modalitati diferite de manipulare a instructiunilor, datelor si informatiilor in scopul gestionarii memoriei.
Este important de remarcat ca, in timp ce termenul "adresa virtuala " poate fi utilizat pentru a indica adresa manipulata de catre programele utilizatorului, notiunea "adresa fizica" este folosita pentru a indica zone de memorie de masa rapida in care este memorata o parte a programului ce se executa, indiferent de celelalte niveluri ale ierarhizarii memoriei.
exemplu de ierarhizare:
Nivel 0 (registre): Date - registre CPU; Cod - Registru instructiuni; Informatii MMU - Registre MMU
Nivel 1 (cache pe circuit): Date - cache date; Cod - sir instructiuni(cache); Informatii MMU - memorie interna MMU
Nivel 2: Cod - cache pe placa
Nivel 3: Cod - memorie primara
Nivel 4: Cod - memorie de masa

1.Registre
Registrele interne ale CPU reprezinta cea mai rapida si cea mai mica memorie din sistem, deoarece ele sint direct conectate la diversele subunitati de prelucrare din cadrul CPU, cum sint unitatea aritmetica si logica (ALU), decodificatorul instructiunii sau unitatea aritmetica de evaluare a adresei.
Registrele de uz general constituie nivelul 0 al memoriei pentru date (incluzind adresele programului) si registrul instructiunii este nivelul 0 al memoriei pentru cod. Caracteristica noua a unor procesoare de 16 si 32 biti, cum este iAPX286 (ce se va discuta in urmatorul capitol), consta in faptul ca ele dispun de citeva registre dedicate pastrarii de informatii temporare necesare gestiunii memoriei. Aceste registre se pot afla, partial, sub controlul programului (privilegiat) dar, in general, sint gestionate de catre CPU.
2.Memorie cache pe circuit 
Cresterea continua a vitezei de prelucrare a noilor microprocesoare necesita si sisteme mai rapide de memorie. Intrucit timpul de acces al circuitelor de memorie descreste in mod constant, timpul total de raspuns este afectat intr o masura importanta de intirzierile de interfatare, incluzind penalizarea de timp a transferului prin frontierele circuitului.
Avind in vedere aceste conditii tehnologice, devine rationala introducerea unui nou nivel de ierarhizare compus din memoria care nu este direct conectata la subunitatile de prelucrare, dar implementata pe aceeasi placheta de siliciu ca si CPU. Desi acest nivel, nivelul 1 al memoriei, este mai lent decit registrele, el necesita unele circuite de interfata; totusi ea este mai rapida decit memoria realizata in exteriorul circuitului. La acest nivel inca persista distinctia intre date, cod si informatii de gestiune a memoriei. Memoria cache pe circuit destinata programului este, uneori, organizata ca stivele de tip FIFO, al carui virf este constituit de registrul instructiunii. Aceasta organizare simpla devine posibila ca urmare a modului aproape liniar al extragerii instructiunilor, cu perturbari create de executia instructiunilor de salt. Deciexista o probabilitate ridicata ca urmatorul cuvint de cod ce trebuie sa fie extras sa se afle la adresa urmatoare.
Instructiunile de salt videaza stiva FIFO, deoarece distrug traseul liniar prin spatiul de adresare. Deci, pentru un scurt timp, efectul favorabil al memoriei cache pe circuit dispare, ca urmare a necesitatii de a aduce noi cuvinte de cod din memoria externa. Dar instructiunile necesita un anumit timp pentru executia lor in interiorul CPU, ceea ce permite unitatii de gestiune a tamponului de memorie sa umple rapid stiva FIFO mai rapid decit are loc vidarea ei de catre CPU, care extrage instructiuni. Deci, dupa executia unei instructiuni de salt, sirul de asteptare in interiorul circuitului a instructiunilor se reface. 
Poate aparea un conflict intre CPU, care trebuie sa execute un ciclu de citire/inscriere a memoriei externe, si unitatea de gestiune a stivei FIFO, care trebuie sa execute un ciclu de citire din memorie pentru a completa sirul de instructiuni. In astfel de situatii ciclul necesar prelucrarii de date este prioritar. 
Referirile necesare accesului la date se fac dupa un model mai putin predictibil decit cel pentru acces la cod, motiv pentru care memoria cache pe circuit este organizata ca o memorie cu acces aleator, compusa dintr o parte de date si  o alta de eticheta (tag), asa cum se vede in figura 4.2. In general, atit componenta DATA, cit si cea TAG, au acelasi numar de cuvinte. DATA pastreaza valorile datelor, iar TAG pastreaza informatia corespunzatoare despre adresa CPU utilizata pentru acces la date. Cind CPU emite o adresa, unitatea de comanda a memoriei cache efectueaza operatiile din figura 4.3. Acest tip de organizare cache, folosita pentru memoria cache pe circuit, este numit "complet asociativ", deoarece memoria TAG este adresata prin continutul sau.
Organizarea generala a memoriei cache: Adresa CPU -> TAG - adresa cache -> DATA -> Continutul locatiei referite
Implementarea memoriei cache pe circuit indica un numar de probleme arhitecturale. In primul rind, memoria TAG este mare comparativ cu memoria DATA, deci se consuma o mare arie de siliciu pentru gestiunea memoriei. In al doilea rind unele studii efectuate prin simulare [17] au aratat ca introducerea memoriei cache pe circuit creste, in loc sa descreasca, viteza ceruta pentru transferul prin frontiera circuitului. Exista un mic numar de implementari cache pe circuit, cum este cazul microprocesorului Zilog Z8000 [18]. Memoriile cache pe circuit, in adevaratul inteles al notiunii, sint, in prezent, limitate la instructiuni, intrucit ele nu ridica mari probleme si reprezinta o imbunatatire fata de sirurile de instructiuni, fiind posibila memorarea intregului cod pentru o mica bucla in memoria circuitului microprocesorului, ceea ce elimina necesitatea reincarcarii codului buclei la fiecare noua executie, asa cum este cazul sirului de instructiuni. Pe de alta parte, costul implementarii sirului de instructiuni este mai mic decit cel pentru implementarea mecanismului cache pentru instructiuni. 
In fine, tehnica de tip cache este folosita si pentru a memora informatiile cu cea mai ridicata fracventa de utilizare, destinate gestiunii memoriei in acelasi circuit cu CPU sau intr un circuit destinat special gestiunii memoriei (memory management unit   MMU). O astfel de unica memorie cache este comandata pe baza principiului LRU (least recently used - cea mai veche informatie folosita), care inlocuieste cea mai veche informatie folosita cu noile date cerute de catre CPU si copiate din memoria externa acesteia. Nu toate mecanismele de comanda a memoriei cache pe circuit sint necontrolabile prin program, dar ele sint implementate prin mijloace hardware si prezenta lor tinde sa fie transparenta fata de programator.
Operarea unitatii de comanda a memoriei cache: Obtinerea adresei CPU -> Cautare in memoria TAG pentru a stabili daca unul din cuvintele memorate in DATA corespunde adresei emise de CPU - (bloc decizie "Gasit?")-Da-> Adresarea cuvantului/Nu-> Copierea cuvintului din memoria externa si trimiterea lui la CPU

3. Memorii cache pe placheta 
Aceleasi motive care justifica introducerea de memorii cache pe circuit recomanda realizarea lor pe aceeasi placheta cu a CPU. Intr adevar, intirzierea introdusa de circuitele de interfatare, ca si de transmisia  si regimurile tranzitorii ale informatiilor pe magistrala sistemului necesita, adesea, introducerea unei stari de asteptare (wait state), mai ales pentru microprocesoa  rele foarte rapide, atunci cind se adreseaza memoriei care nu se afla pe aceeasi placheta. Mai mult, desi memoria cache pe placheta este realizata utilizind circuite cu semiconductoare ca memorie pe urmatorul nivel de ierarhizare (memorie primara), exista intotdeauna memorii cu semiconductoare avind diferite viteze. Deci, memoria cache pe aceeasi placheta permite obtinerea de timpi de acces la sistemul de memorie apropiati de cei oferiti de memoria cache de mare viteza, dar la un pret apropiat de cel al memoriei mai mari si mai lente (memorie primara).
In sistemele multiprocesor apare un motiv suplimentar de introducere a memoriei cache. In acest sistem, concurenta intre diferitele CPU pentru accesul la memorie conduce la intirzieri care au ca efect cresterea timpului mediu de acces la memorie.
Gestiunea memoriei de tip cache presupune existenta unui anumit tip de hardware. Organizarea ramine valabila si pentru memoria cache pe aceeasi placheta cu CPU, dar, intrucit memoria cache in acest caz este mai mare, sint necesare alte mecanisme de gestionare pentru a mentine diversiunea memoriei TAG cit mai mica posibila.
S au studiat cerintele pentru asemenea mecanisme suplimentare. Pentru ilustrarea lor este necesara introducerea urmatorilor parametri:
-dimensiunea cache: dimensiunea memoriei DATA, exprimata   in numar de unitati adresabile de catre CPU;
-dimensiunea blocului: dimensiunea celei mai mici unitati   de memorie care poate fi manipulata de mecanismul de   gestiune  cache. Fiecare acces la alocatie de memorie in   cadrul unui bloc este privit  ca o referinta la bloc. Mai   mult,orice transfer in conjunctie cu memoria primara se   face printr un bloc intreg (in general, dimensiunea   blocului este o putere a lui 2);
-dimensiunea multimii (set size): numarul de locuri   diferite in memoria DATA unde organizarea cache permite   stocarea oricarui bloc citit din memoria primara (si   dimensiunea multimii este, in general, o putere a lui 2). 
un mod posibil de a converti adresele emise de catre CPU in adrese ale memoriei DATA: Fie n numarul de biti de adresa a CPU si k < n numarul de biti necesari pentru a adresa memoria DATA.
Dindu se dimensiunea blocului B=2b, cei mai putini semnificativi b biti de adresa ai CPU sint copiati in adresa memoriei DATA, deoarece offsetul in cadrul blocului nu este luat in considerare de catre mecanismul de conversie a adreselor.
Daca se noteaza cu S dimensiunea multimii, adresa CPU poate fi transformata in una din cele S adrese folosite pentru memoria DATA. Deci bitii s ai adresei cache sint obtinuti prin transformarea prin intermediul memoriei TAG, in timp ce bitii ramasi x = k-s-b sint determinati in mod unic din adresa CPU, apoi sint copiati. Intrucit bitii x determina setul de blocuri posibile in cadrul memoriei de date, iar localizarea exacta in cadrul multimii nu este supusa la restrictiii din partea altor biti de adresa, transformarea celor mai semnificativi n-b-x biti ai adresei emise de catre CPU in cei mai semnificativi s biti ai adresei de memorie cache ar trebui efectuata, in mod ideal, de un set de memorii asociative (cite una pentru fiecare set).
O alta solutie este cea in care se folosesc doar memorii RAM. In acest caz, numarul de biti utilizati pentru memoria TAG sint dati de 2^(k-b) * (n-k+s), care realizeaza corespondenta intre dimensiunea  memoriei cache (2^k), dimensiunea blocului (2^b), dimensiunea multimii (2^s) si dimensiunea spatiului adreselor  CPU (2^n). Prin modificarea valorii lui s se obtin urmatoarele trei organizari clasice:
a) s=0 (organizarea  indexata): fiecare bloc din memoria primara este transformat intr un unic bloc al memoriei cache;
b)0 < s < h-b (organizarea partial asociativa de seturi): orice bloc din memoria primara poate fi transformat intr un numar limitat de seturi ale blocurilor memoriei cache;
c)s = h-b  (organizarea complet asociativa): orice bloc al memoriei primare poate fi transformat in orice bloc al memoriei cache.
Din relatia data mai sus rezulta ca valorile mari ale lui s conduc la dimensiuni mari ale memoriei TAG. Pe de alta parte, unele rezultate experimentale [19] au evidentiat in mod clar ca, prin cresterea dimensiunii setului, creste probabilitatea de acces in memoria cache. In acelasi timp, aceleasi studii au aratat ca dimensiunea de 2 sau 4 a setului conduce la performante foarte apropiate de cele ale organizarii complet asociative.
Din cele de mai sus decurge preferinta proiectantului pentru memorii cu organizare partial asociativa, cu o dimensiune  mica a setului. De exemplu, VAX 11/780 are o memorie cache de 8 kocteti cu dimensiunea setului 2 si dimensiunea blocului 8.

4. Memoria primara
Memoria primara constituie cel mai mare subsistem de memorie adresabil direct de catre CPU. Toate programele ce se ruleaza (cod si date) trebuie memorate in memoria primara, ca si informatiile necesare gestionarii memoriei. Totusi, nu toate programele sint gata de a rula in paralel si, chiar cind un program este executat, el foloseste doar un subset al spatiului sau virtual de adresare pe durata unei anumite faze.
Tehnicile de gestiune a continutului memoriei primare necesita un anumit suport hardware, dar algoritmii sint implementati prin software. De aici decurge o varietate de solutii posibile.
Trebuie remarcat ca memoria primara si registrele sint doua niveluri ierarhice prezente intotdeauna intr un sistem, in timp ce celelalte niveluri s ar putea sa lipseasca.

5.Memoria de masa
Informatia care nu este imediat necesara CPU (programe care nu sint gata de rulare sau subspatii de adresare care nu sint necesare in faza curenta) este memorata in dispozitive cu mediu magnetic de stocare, care ofera un mare volum de memorare la costuri unitare mici, dar cu timpi de acces cu cel putin trei ordine de marime mai mari decit cei ai memoriei primare.

Ierarhizarea memoriei in sistemele multiprocesor.
Organizarea ierarhizata a memoriei are mai multe avantaje, dar poate genera probleme in sistemele multiprocesor, deoarece structura ierarhizata intra in conflict cu necesitatea de a efectua, in mod corect, multiple operatii de citire/inscriere. Problema majora in utilizarea unui sistem ierarhizat de memorie in sisteme mutliprocesor consta in existenta mai multor copii ale acelorasi date in mai multe niveluri, fapt ce impune acualizarea tuturor acestor copii pentru a pastra integritatea datelor.
Pentru mai multa claritate se considera un exemplu. Se presupune ca un sistem este compus din mai multe plachete cu microprocesoare si cu memorie proprie, fiecare placheta fiind conectata, prin intermediul unei magistrale multiprocesor la o memorie comuna (fig. 4.6.). Memoria are o structura ierarhica ale caror niveluri cu numar mic (0,1,2) sint implementate in memoria locala, in timp ce nivelurile cu numar mare (3 si 4) sint realizate in memoria comuna. S au folosit aceleasi numere de niveluri ca in fig. 4.1.
Daca programul rulat de procesorul i realizeaza accesul la locatia x, continutul acesteia este copiat in memoria cache proprie la adresa x'; apoi are loc modificarea continutului lui x', asa ca valorile continute in x si x' nu mai sint identice. Daca un al doilea program, rulat de procesorul j, are nevoie de continutul aceleiasi locatii x, el va folosi o valoare diferita de cea curent utilizata in procesorul i, in pofida faptului ca este vorba de aceeasi adresa virtuala.
Solutia acestui tip de probleme depinde de ierarhizarea nivelurilor implicate. Problema memoriei cache proprii a fost intens studiata [20],[21],[22]. De asemenea ramine deschisa aceeasi problema pentru memoria cache pe circuit. Ca urmare, introducerea tehnicii de tip cache la microprocesoarele evoluate intirzie, folosindu se doar pentru operatia de tip read only, adica pentru operatii implicind programe.